
[dbo].[asi_HierarchyGetFolderSortOut]
SET QUOTED_IDENTIFIER OFF
GO
CREATE PROCEDURE [dbo].[asi_HierarchyGetFolderSortOut]
@parentFolderHierarchyKey uniqueidentifier,
@rootHierarchyKey uniqueidentifier,
@parentFolderSortOrder int,
@parentFolderDepth int,
@newFolderName nvarchar(100),
@newSort int OUTPUT
AS
BEGIN
DECLARE @lowSort int
DECLARE @highSort int
DECLARE @lowDocumentName nvarchar(100)
DECLARE @Run int
SET @Run = 0
WHILE @Run < 2
BEGIN
SELECT @highSort = Min(SortOrder)
FROM Hierarchy a INNER JOIN DocumentMain b
ON a.UniformKey = b.DocumentVersionKey AND b.DocumentStatusCode = 40
WHERE (a.ParentHierarchyKey = @parentFolderHierarchyKey
AND b.DocumentName > @newFolderName
AND b.DocumentTypeCode = 'FOL')
OR (a.ParentHierarchyKey = @parentFolderHierarchyKey
AND a.SortOrder > @parentFolderSortOrder
AND a.Depth <= @parentFolderDepth)
IF @highSort IS NULL
SELECT @highSort = IsNull(Max(SortOrder),0) + 2048
FROM Hierarchy
WHERE RootHierarchyKey = @rootHierarchyKey
SELECT @lowSort = IsNull(Max(SortOrder),0)
FROM Hierarchy
WHERE RootHierarchyKey = @rootHierarchyKey
AND SortOrder < @highSort
IF @lowSort < @parentFolderSortOrder
BEGIN
IF @Run = 0
SET @lowSort = @parentFolderSortOrder
ELSE
BEGIN
SET @lowSort = @parentFolderSortOrder
IF @highSort - @lowSort < 2
SET @highSort = @lowSort + 2
END
END
IF @highSort - @lowSort < 2
BEGIN
EXEC asi_HierarchyResort2 @rootHierarchyKey
SELECT @parentFolderSortOrder = SortOrder FROM Hierarchy WHERE HierarchyKey = @parentFolderHierarchyKey
SET @Run = @Run + 1
END
ELSE
SET @Run = 2
END
SET @newSort = ((@highSort - @lowSort) / 2) + @lowSort
END
GO